; (function () {
    return
    /**
   * @param {number[]} prices
   * @return {number}
   */
    var maxProfit = function (prices) {
        function addElementToMaxArray(maxArray, newElement) {
            console.log('函数了=>', maxArray, newElement);
            // 如果数组未满，直接添加新元素并排序  
            if (maxArray.length < 2) {
                maxArray.push(newElement);
                maxArray.sort((a, b) => b - a); // 降序排序  
                return maxArray;
            }

            // 如果新元素大于或等于当前最小元素，替换最小元素  
            if (newElement > maxArray[1]) {
                maxArray[1] = newElement;
            }
            maxArray.sort((a, b) => b - a); // 降序排序  
            return maxArray;
        }
        let dp = new Array(prices.length).fill(0).map(val => new Array(2).fill(0))
        dp[0][0] = prices[0]
        dp[0][1] = 0

        let result = []

        for (let i = 1; i < dp.length; i++) {
            //  当prices[i]>prices[i-1]
            if (prices[i] < prices[i - 1]) {
                // 这个时候可以选择卖出去一次
                dp[i][0] = prices[i]
                dp[i][1] = 0

                result = addElementToMaxArray(result, dp[i - 1][1])
                continue
            }

            dp[i][0] = Math.min(dp[i - 1][0], prices[i])
            dp[i][1] = Math.max(dp[i - 1][1], prices[i] - dp[i - 1][0])
        }
        result = addElementToMaxArray(result, dp[prices.length - 1][1])
        // return result.reduce((a, b) => a + b, 0)
        dp.forEach(val => {
            console.log(val + '');
        })
        console.log(result);
    };
    // 成本1   利润1   成本2   利润2
    // 7       0      
    // 1       0
    // 1       4
    // 3       4
    // 3       7
    // 4       7
    let arr = [7, 1, 5, 3, 6, 4]
    let arr2 = [1, 2, 4, 2, 5, 7, 2, 4, 9, 0]
    // maxProfit(arr2)
})();



; (function () {
    //return
    const maxProfit = prices => {
        const len = prices.length;
        const dp = new Array(5).fill(0);
        dp[1] = -prices[0];
        dp[3] = -prices[0];
        // dp[5] = -prices[0];
        for (let i = 1; i < len; i++) {


            // dp[6] = Math.max(dp[6], dp[5] + prices[i]);// 第三次卖出的现金
            // dp[5] = Math.max(dp[5], dp[4] - prices[i]);// 第三次持有的现金
            dp[4] = Math.max(dp[4], dp[3] + prices[i]);// 第二次卖出的现金
            dp[3] = Math.max(dp[3], dp[2] - prices[i]);// 第二次持有的现金


            dp[2] = Math.max(dp[2], dp[1] + prices[i]);// 第一次卖出的现金
            dp[1] = Math.max(dp[1], dp[0] - prices[i]);// 第一次持有的现金


            console.log(prices[i], '=>', dp.slice(1));
        }

        return dp[4];
    };
    let arr2 = [2, 3, 2, 2, 11, 1, 4, 15]
    maxProfit(arr2)
})();

console.log('===========');
; (function () {
    //return

    /**
   * @param {number} k
   * @param {number[]} prices
   * @return {number}
   */
    var maxProfit = function (k, prices) {
        const len = prices.length;
        const dp = new Array(2 * k).fill(0);
        for (let i = 0; i < k * 2; i = i + 2) {

            dp[i] = - prices[0]
        }
        for (let i = 1; i < len; i++) {

            for (let j = k * 2 - 1; j >= 0; j--) {
                if (j === 0) {
                    dp[j] = Math.max(dp[j], - prices[i]);
                    continue
                }
                if (j % 2 > 0) {
                    dp[j] = Math.max(dp[j], dp[j - 1] + prices[i]);
                } else {
                    dp[j] = Math.max(dp[j], dp[j - 1] - prices[i]);
                }

            }
            console.log(prices[i], '==>', dp);
        }

        return dp[2 * k - 1];
    };

    let arr2 = [2, 3, 2, 2, 11, 1, 4, 15]
    maxProfit(2,arr2)
})();









